package org.xx.armory.db.impl;

import org.xx.armory.db.TransactionManager;
import org.xx.armory.db.TransactionProperties;

import javax.sql.DataSource;

import static org.xx.armory.commons.Validators.notNull;

/**
 * 实现了事务管理器的基本功能。
 */
public abstract class AbstractTransactionManager
        implements TransactionManager {
    private DataSource dataSource;

    /**
     * 构造抽象的事务管理器实例。
     * <p>默认不使用串行化事务。</p>
     */
    protected AbstractTransactionManager() {
    }
//
//    /**
//     * 使用设置的数据源创建一个数据库连接引用。
//     *
//     * @return 已创建的数据库连接引用。
//     */
//    protected final ConnectionRef openConnection() {
//        return new ConnectionWrapper(this.dataSource);
//    }

    /**
     * {@inheritDoc}
     */
    @Override
    public synchronized final DataSource getDataSource() {
        return this.dataSource;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public synchronized final void setDataSource(
            DataSource dataSource
    ) {
        this.dataSource = notNull(dataSource, "dataSource");
    }

    protected void transactionPropertiesChanged(
            TransactionProperties oldProperties,
            TransactionProperties newProperties
    ) {
    }
}
